cmake_minimum_required(VERSION 3.10 FATAL_ERROR)

project(recipe-24 LANGUAGES CXX)

# 设置C++标准为C++11
set(CMAKE_CXX_STANDARD 11)
# 禁用C++扩展（确保代码符合标准）
set(CMAKE_CXX_EXTENSIONS OFF)
# 要求使用指定的C++标准
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 添加一个静态库目标，包含leaky_implementation.cpp
add_library(exampleLibrary leakyImplementation.cpp)

# 添加一个可执行文件目标，作为我们的测试程序
add_executable(cpp_test test.cpp)

# 将测试程序链接到我们定义的库
target_link_libraries(cpp_test exampleLibrary)

find_program(MEMORYCHECK_COMMAND NAMES valgrind)

# 设置Valgrind的命令行选项
# --trace-children=yes: 跟踪由测试程序启动的子进程
# --leak-check=full: 执行最严格的内存泄漏检查
set(MEMORYCHECK_COMMAND_OPTIONS "--trace-children=yes --leak-check=full")

# 包含CTest模块，启用测试功能
include(CTest)
# 激活测试，这是运行ctest命令的前提
enable_testing()

# 添加一个名为cpp_test的测试
# COMMAND $<TARGET_FILE:cpp_test> 会自动解析为cpp_test可执行文件的完整路径
add_test(
  NAME cpp_test
  COMMAND $<TARGET_FILE:cpp_test>
)